home *** CD-ROM | disk | FTP | other *** search
/ MacWorld 1998 January / Macworld (1998-01).dmg / Shareware World / Comms & Internet / HTML mode 2.0 etc. / javaScriptMode.tcl < prev    next >
Text File  |  1997-09-22  |  4KB  |  151 lines

  1. ## -*-Tcl-*-
  2.  # ###################################################################
  3.  #  JavaScript mode - tools for editing JavaScript documents
  4.  # 
  5.  #  FILE: "javaScriptMode.tcl"
  6.  #                                    created: 97-02-09 14.00.54 
  7.  #                                last update: 97-09-16 19.01.56 
  8.  #  Author: Johan Linde
  9.  #  E-mail: <jl@theophys.kth.se>
  10.  #     www: <http://bach.theophys.kth.se/~jl/Alpha.html>
  11.  #  
  12.  # Version: 1.0.2
  13.  # 
  14.  # Copyright 1997 by Johan Linde
  15.  #  
  16.  # This software may be used freely, and distributed freely, as long as the 
  17.  # receiver is not obligated in any way by receiving it.
  18.  #  
  19.  # If you make improvements to this file, please share them!
  20.  # 
  21.  # ###################################################################
  22.  ##
  23.  
  24. if {$startingUp} {
  25.     addMode JScr JScrDummy {*.js *.JS} {}
  26.     return
  27. }
  28.  
  29.  
  30. # ◊◊◊◊ Change below for new system §12 ◊◊◊◊ #
  31.  
  32. newModeVar JScr elecRBrace 1 1
  33. newModeVar JScr prefixString {//} 0 
  34. newModeVar JScr elecLBrace 1 1
  35. newModeVar JScr electricSemi 1 1
  36. newModeVar JScr wordWrap 0 1
  37. newModeVar JScr funcExpr {^function *([+-a-zA-Z0-9]+)} 0
  38. newModeVar JScr parseExpr {^function *([+-a-zA-Z0-9]+)} 0
  39. newModeVar JScr wordBreak {\w+} 0
  40. newModeVar JScr wordBreakPreface {\W} 0
  41. newModeVar JScr electricTab 0 1
  42. newModeVar JScr stringColor    green    0
  43. newModeVar JScr commentColor red    0
  44. newModeVar JScr keywordColor blue    0
  45.  
  46. # ◊◊◊◊ end changing for new system §12 ◊◊◊◊ #
  47.  
  48. regModeKeywords  -e {//} -b {/*} {*/} -c $JScrmodeVars(commentColor) -k $JScrmodeVars(keywordColor)  -s $JScrmodeVars(stringColor) JScr {
  49.     break case continue default do for in function if else new return switch this var while with true false }
  50.  
  51.  
  52. proc JScrDummy {} {}
  53.  
  54. # ◊◊◊◊ Change below for new system §13 ◊◊◊◊ #
  55.  
  56. proc JScrindentLine {} { CindentLine }
  57.  
  58.  
  59. bind 'l' <C> cDividingLine JScr
  60.  
  61. if {[info commands useUniversalCompletions] == ""} {
  62.     # No Vince's Additions
  63.     newModeVar JScr elecColon 1 1
  64.     bind '\{' <s> electricLeft    JScr
  65.     bind '\}' <s> electricRight    JScr
  66.     bind '\;' JScrelectricSemi JScr
  67.     bind '\t' doATab JScr
  68.     bind '\t' <o> {doATab 1} JScr
  69.     bind '\r' JScrCarriageReturn JScr
  70.     # Carriage return
  71.     # Identical with the C/C++ proc, but I want it to be independent of C/C++ mode.
  72.     proc JScrCarriageReturn {} {
  73.         if {[lookAt [expr [getPos] - 1]] == ":"} {
  74.             if { [lookAt [getPos]] == "\r" } {
  75.                 indentLine
  76.                 endOfLine
  77.                 carriageReturn
  78.             } else {
  79.                 set pos [getPos]
  80.                 endOfLine
  81.                 set t [getText $pos [getPos]]
  82.                 replaceText $pos [getPos] ""
  83.                 indentLine
  84.                 endOfLine
  85.                 carriageReturn
  86.                 insertText $t
  87.             }
  88.             indentLine
  89.         } else {
  90.             carriageReturn
  91.             indentLine
  92.         }
  93.         
  94.     }
  95.     # Electric semicolon
  96.     # Identical with the original proc, but I want it to be independent of C/C++ mode.
  97.     proc JScrelectricSemi {} {
  98.         global JScrmodeVars
  99.         if [isSelection] { deleteSelection }
  100.         if {!$JScrmodeVars(electricSemi)} {
  101.             insertText ";"
  102.             return
  103.         }
  104.         set pos [getPos]
  105.         set start [lineStart $pos]
  106.         set text [getText $start $pos]
  107.         
  108.         if {[string first "for" $text] != "-1"} {
  109.             set lefts 0
  110.             set rights 0
  111.             set len [string length $text]
  112.             for {set i 0} {$i < $len} {incr i} {
  113.                 case [string index $text $i] in {
  114.                     "("    { incr lefts }
  115.                     ")"    { incr rights }
  116.                 }
  117.             }
  118.             if {$lefts != $rights} {
  119.                 insertText ";"
  120.                 return
  121.             }
  122.         }
  123.         
  124.         insertText ";\r" [JScrGetIndent $pos]
  125.     }
  126.     # get the leading whitespace of the current line
  127.     proc JScrGetIndent { pos } {
  128.         set res [search -s -n -f 1 -r 1 "^\[ \t\]*" [lineStart $pos]]
  129.         return [JScrIndentConvert [eval getText $res]]
  130.     }
  131.     
  132.     # convert it to minimal form: tabs then spaces.
  133.     proc JScrIndentConvert {indent} {
  134.         getWinInfo a
  135.         set sp [string range "              " 1 $a(tabsize) ]
  136.         regsub -all $sp $indent "\t" indent
  137.         regsub -all "\[ \]+\t" $indent "\t" indent
  138.         return $indent
  139.     }
  140.  
  141. } else {
  142.     # Vince's Additions
  143.     newModeVar JScr electricColon 1 1
  144.     set commentCharacters(JScr:General) [list "*" "//"]
  145.     set commentCharacters(JScr:Paragraph) [list "/* " " */" " * "]
  146.     set commentCharacters(JScr:Box) [list "/*" 2 "*/" 2 "*" 3]
  147.     proc JScrcarriageReturn {} {C++carriageReturn}
  148. }
  149.  
  150. # ◊◊◊◊ end changing for new system §13 ◊◊◊◊ #
  151.